What is remark-footnotes?
The remark-footnotes package is a plugin for the remark Markdown processor that allows users to add footnotes to their Markdown documents. It provides a syntax to include footnotes in the text, which are then rendered as references within the document, typically at the bottom of the page.
What are remark-footnotes's main functionalities?
Footnote Definition
This feature allows users to define footnotes in their Markdown content. The code sample shows how to use the remark-footnotes plugin with the remark library to process a Markdown string that includes a footnote definition.
const remark = require('remark');
const footnotes = require('remark-footnotes');
remark()
.use(footnotes, { inlineNotes: true })
.process('Some text[^1].\n\n[^1]: This is a footnote.', function (err, file) {
console.log(String(file));
});
Inline Footnotes
This feature enables the use of inline footnotes, which are footnotes defined directly within the text. The code sample demonstrates how to enable inline footnotes using the remark-footnotes plugin.
const remark = require('remark');
const footnotes = require('remark-footnotes');
remark()
.use(footnotes, { inlineNotes: true })
.process('Some text^[This is an inline footnote].', function (err, file) {
console.log(String(file));
});
Other packages similar to remark-footnotes
markdown-it-footnote
markdown-it-footnote is a plugin for the markdown-it Markdown parser. It allows users to add footnotes to their Markdown documents in a similar way to remark-footnotes. The main difference is that markdown-it-footnote is designed to work with the markdown-it parser, while remark-footnotes is designed for the remark ecosystem.

remark plugin to add support for footnotes.
Important!
This plugin is affected by the new parser in remark
(micromark
,
see remarkjs/remark#536
).
Use version 2 while you’re still on remark 12.
Use version 3 for remark 13+.
Install
npm:
npm install remark-footnotes
Use
Say we have the following file, example.md
:
Here is a footnote reference,[^1]
another,[^longnote],
and optionally there are inline
notes.^[you can type them inline, which may be easier, since you don’t
have to pick an identifier and move down to type the note.]
[^1]: Here is the footnote.
[^longnote]: Here’s one with multiple blocks.
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
{ some.code }
The whole paragraph can be indented, or just the first
line. In this way, multi-paragraph footnotes work like
multi-paragraph list items.
This paragraph won’t be part of the note, because it
isn’t indented.
And our script, example.js
, looks as follows:
var vfile = require('to-vfile')
var unified = require('unified')
var markdown = require('remark-parse')
var remark2rehype = require('remark-rehype')
var format = require('rehype-format')
var html = require('rehype-stringify')
var footnotes = require('remark-footnotes')
unified()
.use(markdown)
.use(footnotes, {inlineNotes: true})
.use(remark2rehype)
.use(format)
.use(html)
.process(vfile.readSync('example.md'), function (err, file) {
if (err) throw err
console.log(String(file))
})
Now, running node example
yields:
<p>
Here is a footnote reference,<sup id="fnref-1"><a href="#fn-1" class="footnote-ref">1</a></sup>
another,<sup id="fnref-longnote"><a href="#fn-longnote" class="footnote-ref">longnote</a></sup>,
and optionally there are inline
notes.<sup id="fnref-2"><a href="#fn-2" class="footnote-ref">2</a></sup>
</p>
<p>
This paragraph won’t be part of the note, because it
isn’t indented.
</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn-1">
<p>Here is the footnote.<a href="#fnref-1" class="footnote-backref">↩</a></p>
</li>
<li id="fn-longnote">
<p>Here’s one with multiple blocks.</p>
<p>
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
</p>
<pre><code>{ some.code }
</code></pre>
<p>
The whole paragraph can be indented, or just the first
line. In this way, multi-paragraph footnotes work like
multi-paragraph list items.<a href="#fnref-longnote" class="footnote-backref">↩</a>
</p>
</li>
<li id="fn-2">
<p>
you can type them inline, which may be easier, since you don’t
have to pick an identifier and move down to type the note.<a href="#fnref-2" class="footnote-backref">↩</a>
</p>
</li>
</ol>
</div>
API
Plugin to add support for footnotes.
options.inlineNotes
Whether to support ^[inline notes]
(boolean
, default: false
).
Passed to micromark-extension-footnote
.
Notes
- Labels, such as
[^this]
(in a footnote reference) or [^this]:
(in a
footnote definition) work like link references
- Footnote definitions work like lists
- Image and link references cannot start with carets, so
![^this doesn’t work][]
Security
Use of remark-footnotes
does not involve rehype
(hast) or user content so there are no openings for cross-site
scripting (XSS) attacks.
Related
Contribute
See contributing.md
in remarkjs/.github
for ways
to get started.
See support.md
for ways to get help.
This project has a code of conduct.
By interacting with this repository, organization, or community you agree to
abide by its terms.
License
MIT © Titus Wormer